package com.wangc.study.stream;

import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
import java.util.stream.Stream;

/**
 * @program: study
 * @description:  Stream 生成方式
 * @author: sk_wangc
 * @create: 2020-05-21 15:21
 **/
public class StreamDemo {

    //数组方式生成
    static void get1() {
        String[] strs = {"a","b","c","d"};
        Stream strs1 = Stream.of(strs);
        strs1.forEach(System.out::println);
    }

    //集合方式生成
    static void get2() {
        List list = Arrays.asList("1", "2", "3");
        Stream stream = list.stream();
        stream.forEach(System.out::println);
    }

    //通过stream generate 生成
    //stream.generate(Supplier s)  参数被定义为Supplier，只能有一个输出
    //generate 是无限制输出，他将一直调用
    //需要加 limit 限制
    static void get3() {
        Stream<Integer> stream = Stream.generate(() -> 1);
        stream.forEach(System.out::println);
        //stream.limit(5).forEach(System.out::println);
    }

    //iterator
    //public static<T> Stream<T> iterate(final T seed, final UnaryOperator<T> f)
    //里面参数类型为UnaryOperator，UnaryOperator 代表一个输入，一个输出（输入和输出是相同类型的）
    static void get4() {
        Stream<Integer> integerStream = Stream.iterate(1, x -> x + 1);
        integerStream.limit(10).forEach(System.out::println);
    }


    //其他方式
    static void get5() {
        String str = "abcdefg";
        IntStream stream = str.chars();
        stream.forEach(System.out::println);
    }

    public static void main(String[] args) {
        //stram的五种生成操作
        get1();
        get2();
        get3();
        get4();
        get5();



    }
}
